#pragma once
#ifndef __THREADPOOL_H__
#define __THREADPOOL_H__

#include "queue.h"
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <string.h>
#include <stdint.h>

typedef struct ThreadPool ThreadPool;    // 线程池结构体

struct ThreadPool {
    bool running;                       // 线程池是否运行中
    uint32_t worker_count;              // 工作线程个数
    pthread_t *workers;                 // 工作线程ID
    Queue *tasks;                       // 任务队列
    pthread_mutex_t mutex;              // 保护任务队列的互斥锁
    pthread_cond_t tasks_not_empty;     // 表示任务队列不为空的条件变量
    pthread_cond_t tasks_not_full;      // 表示任务队列有空位的条件变量
};

ThreadPool *threadpool_create(const uint32_t workers_count, const uint32_t tasks_capacity);     // 创建线程池
void threadpool_destroy(ThreadPool *pool);             // 销毁线程池
void *threadpool_worker_thread(void *arg);             // 工作线程
void threadpool_push(ThreadPool *pool, Task *task);    // 线程池添加任务

#endif  // __THREADPOOL_H__
